22034cc9a0256bfb589bd9e6947b53cf9d0cae1d,src/edu/stanford/nlp/optimization/AbstractCachingDiffFunction.java,AbstractCachingDiffFunction,gradientCheck,#number#number#number[]#,28

Before Change


      oldX = x[paramIndex];
      x[paramIndex] = oldX + epsilon;
      // System.err.println("\n\n\ncalling valueAt1");
      plusVal = valueAt(x);
      x[paramIndex] = oldX - epsilon;
      // System.err.println("\n\n\ncalling valueAt2");
      minusVal = valueAt(x);
      appDeriv = (plusVal - minusVal) / twoEpsilon;
      calcDeriv = savedDeriv[paramIndex];
      diff = Math.abs(appDeriv - calcDeriv);
      pct = diff / Math.min(Math.abs(appDeriv), Math.abs(calcDeriv));
      if (diff > diffThreshold && pct > diffPctThreshold) {
        System.err.printf("Grad fail at %2d, appGrad=%9.7f, calcGrad=%9.7f, diff=%9.7f, pct=%9.7f\n", paramIndex,appDeriv,calcDeriv,diff,pct); 
        returnVal= false;

After Change


      double oldX = x[paramIndex];
      x[paramIndex] = oldX + epsilon;
      // System.err.println("\n\n\ncalling valueAt1");
      double plusVal = valueAt(x);
      x[paramIndex] = oldX - epsilon;
      // System.err.println("\n\n\ncalling valueAt2");
      double minusVal = valueAt(x);
      double appDeriv = (plusVal - minusVal) / twoEpsilon;
      double calcDeriv = savedDeriv[paramIndex];
      double diff = Math.abs(appDeriv - calcDeriv);
      double pct = diff / Math.min(Math.abs(appDeriv), Math.abs(calcDeriv));
      if (diff > diffThreshold && pct > diffPctThreshold) {
        System.err.printf("Grad fail at %2d, appGrad=%9.7f, calcGrad=%9.7f, diff=%9.7f, pct=%9.7f\n", paramIndex,appDeriv,calcDeriv,diff,pct);
        returnVal= false;